package org.assocsp3.dao;

import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Repository
@Transactional//(propagation=Propagation.MANDATORY)
/* mode de propagation MANDATORY :
 * Les méthodes devront obligatoirement etre excutee dans un contexte transactionnel. 
 * Sinon, une exception est levée.
 * Les méthodes read-only seront en REQUIRED : si aucun contexte transactionnel n'existe
 * à l'appel, il sera crée.
 */
public interface GenericDao <T>{
        
        public void add(T o);
        public void update(T o);
        public void delete(T o);
        
    	@Transactional(propagation=Propagation.REQUIRED,readOnly = true)
        public T load(int id, String islazy);
    	
    	@Transactional(propagation=Propagation.REQUIRED,readOnly = true)
        public T loadByName(String s,String islazy);
    	
    	@Transactional(propagation=Propagation.REQUIRED,readOnly = true)
        public List<T>  loadAll();
    	
    	public void associer(T a,Object o);
        
}
